﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using DynamicAuditor.DTOs;

namespace DynamicAuditor.DALAuditor
{
    public class clsModuloMg
    {

        //Constructor
        public clsModuloMg()
        {

        }


        //Declaracion de la varaiable tipo datacontext que vamos a utilizar en toda la clase.
        DynamicAuditorDataContext bd = new DynamicAuditorDataContext();


        #region Metodos

        public List<dtoModulo> ObtenerModulosActivos()
        {
            int i = 0;
            List<dtoModulo> modulosactivos = new List<dtoModulo>();

            try
            {
                var modactivos = (from p in bd.MODULOs
                                   where p.Activo == true
                                   orderby p.Nombre
                                   select p).ToList();

                foreach (MODULO mod in modactivos)
                {
                    modulosactivos.Add(new dtoModulo());
                    modulosactivos[i].Activo = Convert.ToBoolean(mod.Activo);
                    modulosactivos[i].Codigo = Convert.ToInt16(mod.Codigo);
                    modulosactivos[i].Descripcion = mod.Descripcion;
                    modulosactivos[i].Idmodulo = mod.idModulo;
                    modulosactivos[i].Nombre = mod.Nombre;
                    i++;

                }

            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo obtener la informacion solicitada." + ex.Message);
            }

            return modulosactivos;
        }

        public int CrearModulo(dtoModulo modulo)
        {
            int resp = 0;
            MODULO mod = new MODULO();

            try
            {
                mod.Activo = modulo.Activo;
                mod.Codigo = modulo.Codigo;
                mod.Descripcion = modulo.Descripcion;
                mod.Nombre = modulo.Nombre;

                bd.MODULOs.InsertOnSubmit(mod);
                bd.SubmitChanges();
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo crear el modulo." + ex.Message);
            }

            resp = 1;

            return resp;
        }

        public int DeleteModulo(int idmodulo)
        {
            //Se retorna un 1 si el proceso se realizo correctamente de lo contrario se retorna un 0

            int x = 0;

            try
            {

                var per = bd.MODULOs.Single(p => p.idModulo == idmodulo);

                bd.MODULOs.DeleteOnSubmit(per);
                bd.SubmitChanges();
                x = 1;
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo borrar el modulo solicitado. " + ex.Message);
                x = 0;
            }

            return x;

        }

        public int UpdateModulo(dtoModulo modulo)
        {

            //Se retorna un 1 si el proceso se realizo correctamente de lo contrario se retorna un 0
            int i = 0;


            try
            {
                MODULO mod = bd.MODULOs.Single(p => p.idModulo == modulo.Idmodulo);
                mod.Descripcion = modulo.Descripcion;
                mod.Activo = modulo.Activo;
                mod.Codigo = modulo.Codigo;
                mod.Nombre = modulo.Nombre;


                bd.SubmitChanges();

                i = 1;

            }
            catch (Exception ex)
            {
                throw new Exception("No se pudieron actualizar los datos del perfil." + ex.Message);
            }
            return i;
        }

        public dtoModulo ObtenerModuloporId(int idmodulo)
        {
            dtoModulo modulo = new dtoModulo();

            try
            {
                MODULO datmodulo = bd.MODULOs.Single(p => p.idModulo == idmodulo);
                modulo.Activo = Convert.ToBoolean(datmodulo.Activo);
                modulo.Codigo = Convert.ToInt16(datmodulo.Codigo);
                modulo.Descripcion = datmodulo.Descripcion;
                modulo.Nombre = datmodulo.Nombre;
                modulo.Idmodulo = datmodulo.idModulo;


            }
            catch (Exception ex)
            {
                return null;
                throw new Exception("No se pudo obtener datos del modulo. " + ex.Message);

            }

            return modulo;
        }

        public dtoModulo ObtenerModuloporNombreUsuario(string strmodulo)
        {
            dtoModulo modulo = new dtoModulo();

            try
            {
                MODULO datmodulo = bd.MODULOs.Single(p => p.Nombre == strmodulo);
                modulo.Activo = Convert.ToBoolean(datmodulo.Activo);
                modulo.Codigo = Convert.ToInt16(datmodulo.Codigo);
                modulo.Descripcion = datmodulo.Descripcion;
                modulo.Nombre = datmodulo.Nombre;
                modulo.Idmodulo= datmodulo.idModulo;
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo obtener datos del modulo. " + ex.Message);
            }

            return modulo;
        }

        #endregion Metodos
    }
}
